//package io.renren.datasource.mongo;
//
//import com.mongodb.MongoClient;
//import com.mongodb.client.MongoCollection;
//import com.mongodb.client.MongoDatabase;
//import org.bson.Document;
//
//import java.util.ArrayList;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.concurrent.Callable;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//import java.util.concurrent.Future;
//
///**
// * mongodb插入测试
// */
//public class MongodbInsertThread {
//
//    private static void insert(MongoCollection<Document> collection) {
//        Document document = new Document("name", "dog");
//        List<Document> documents = new ArrayList<Document>();
//        documents.add(document);
//        collection.insertMany(documents);
//    }
//
//    /**
//     * ArrayList未初始化 30000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert1(MongoCollection<Document> collection) {
//        List<Document> documents = new ArrayList<Document>();
//        for (int num=0; num<30000; num++) {
//            documents.add(new Document("name", "dog"));
//        }
//        collection.insertMany(documents);
//    }
//
//    /**
//     * ArrayList初始化大小 30000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert2(MongoCollection<Document> collection) {
//        List<Document> documents = new ArrayList<Document>(30000);
//        for (int num=0; num<30000; num++) {
//            documents.add(new Document("name", "dog"));
//        }
//        collection.insertMany(documents);
//    }
//
//    /**
//     * LinkedList 三线程（池） 10000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert3(MongoCollection<Document> collection) {
//        ExecutorService executorService = Executors.newFixedThreadPool(3);
//        long start3 = System.currentTimeMillis();
//        for (int i = 0; i < 3; i++) {
//            final int task = i;
//            Future<Integer> future = executorService.submit(new Callable<Integer>() {
//                public Integer call() throws Exception {
//                    int status = 0;
//                    try {
//                        List<Document> documents = new LinkedList<Document>();
//                        for (int num=0; num<10000; num++) {
//                            documents.add(new Document("name", "dog"));
//                        }
//                        collection.insertMany(documents);
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                    return status;
//                }
//            });
//        }
//        // TODO 结束所有线程
//        executorService.shutdown();
//        // TODO 这个方法是统计所有线程全部执行完毕的时间
//        while(true){
//            if(executorService.isTerminated()){
//                long end3 = System.currentTimeMillis();
//                System.out.println("3个线程执行用时: " + (end3 - start3) + "ms");
//                break;
//            }
//        }
//    }
//
//    /**
//     * LinkedList 三线程（普通） 10000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert5(MongoCollection<Document> collection) {
//        long start3 = System.currentTimeMillis();
//        Thread t1 = new Thread(){
//            public void run(){
//                List<Document> documents = new LinkedList<Document>();
//                for (int num=0; num<10000; num++) {
//                    documents.add(new Document("name", "dog"));
//                }
//                collection.insertMany(documents);
//            }
//        };
//        t1.start();
//        Thread t2 = new Thread(){
//            public void run(){
//                List<Document> documents = new LinkedList<Document>();
//                for (int num=0; num<10000; num++) {
//                    documents.add(new Document("name", "dog"));
//                }
//                collection.insertMany(documents);
//            }
//        };
//        t2.start();
//        Thread t3 = new Thread(){
//            public void run(){
//                List<Document> documents = new LinkedList<Document>();
//                for (int num=0; num<10000; num++) {
//                    documents.add(new Document("name", "dog"));
//                }
//                collection.insertMany(documents);
//            }
//        };
//        t3.start();
//        long end3 = 0;
//        while(true) {
//            if (!(t1.isAlive() || t2.isAlive() || t3.isAlive())) {
//                end3 = System.currentTimeMillis();
//                break;
//            }
//        }
//        // TODO 结束所有线程
//        System.out.println("3个线程执行用时: " + (end3 - start3) + "ms");
//    }
//
//    /**
//     * LinkedList 三线程（普通） 10000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert6(MongoCollection<Document> collection) {
//        long start3 = System.currentTimeMillis();
//        for (int i=0; i<3; i++){
//            new Thread(){
//                public void run(){
//                    List<Document> documents = new LinkedList<Document>();
//                    for (int num=0; num<10000; num++) {
//                        documents.add(new Document("name", "dog"));
//                    }
//                    collection.insertMany(documents);
//                }
//            }.start();
//        }
//        long end3 = 0;
//        while(true) {
//            System.out.println(Thread.activeCount());
//            if (Thread.activeCount()==4) {
//                end3 = System.currentTimeMillis();
//                break;
//            }
//        }
//        // TODO 结束所有线程
//        System.out.println("3个线程执行用时: " + (end3 - start3) + "ms");
//    }
//
//    /**
//     * LinkedList 30000条数据批量插入测试
//     * @param collection
//     */
//    private static void insert4(MongoCollection<Document> collection) {
//        List<Document> documents = new LinkedList<Document>();
//        for (int num=0; num<30000; num++) {
//            documents.add(new Document("name", "dog"));
//        }
//        collection.insertMany(documents);
//    }
//
//    public static void main(String args[]) {
//        MongoClient mongoClient = null;
//        try {
//            mongoClient = new MongoClient("localhost", 27017);
//            MongoDatabase mongoDatabase = mongoClient.getDatabase("admin");
//            System.out.println("Connect to database successfully");
//            MongoCollection<Document> collection = mongoDatabase
//                    .getCollection("test");
//
////            long start = System.currentTimeMillis();
////            for (int num=0; num<30000; num++) {
////                insert(collection);
////            }
////            long end = System.currentTimeMillis();
////            System.out.println(end-start);
//
////            long start1 = System.currentTimeMillis();
////            insert1(collection);
////            long end1 = System.currentTimeMillis();
////            System.out.println("ArrayList未初始化："+(end1-start1));
////
////            long start2 = System.currentTimeMillis();
////            insert2(collection);
////            long end2 = System.currentTimeMillis();
////            System.out.println("ArrayList初始化大小："+(end2-start2));
////
////            long start4 = System.currentTimeMillis();
////            insert4(collection);
////            long end4 = System.currentTimeMillis();
////            System.out.println("LinkedList初始化大小："+(end4-start4));
//
//            insert3(collection);
//
//            insert5(collection);
//
////            FindIterable<Document> findIterable = collection.find();
////            MongoCursor<Document> mongoCursor = findIterable.iterator();
////            while (mongoCursor.hasNext()) {
////                System.out.println(mongoCursor.next());
////            }
//        }
//        catch (Exception e) {
//            System.err.println(e.getClass().getName() + ": " + e.getMessage());
//        }
//        finally{
//            mongoClient.close();
//        }
//    }
//
//}